package com.gitee.ty850454.common;

import java.util.Arrays;
import java.util.NoSuchElementException;

/**
 * 短整型栈
 *
 * @author xy
 */
public class IntStack {

    /** 栈元素数组 */
    private final int[] elements;

    /** 栈顶索引，负数表示空栈 */
    private int top = -1;

    /**
     * 初始化一个栈
     *
     * @param capacity 栈容量
     */
    public IntStack(int capacity) {
        elements = new int[capacity];
    }

    /**
     * 判断栈是否为空
     *
     * @return 空栈返回true，否则返回false
     */
    public boolean empty() {
        return top < 0;
    }

    /**
     * 查看堆栈顶部的对象
     *
     * @return 栈顶部的对象，
     * @throws NoSuchElementException 空栈时抛出
     */
    public int peek() {
        if (empty()) {
            throw new NoSuchElementException();
        }
        return elements[top];
    }

    /**
     * 压栈
     *
     * @param newElement 压入的元素
     * @return 压入的元素
     */
    public int push(int newElement) {
        elements[++top] = newElement;
        return newElement;
    }

    /**
     * 弹栈
     *
     * @return 弹出的元素
     */
    public int pop() {
        if (empty()) {
            throw new NoSuchElementException();
        }
        return elements[top--];
    }

    @Override
    public String toString() {
        if (empty()) {
            return "栈[]";
        }
        int[] intArr = new int[top + 1];
        System.arraycopy(elements, 0, intArr, 0, top + 1);
        return "栈" + Arrays.toString(intArr);
    }

    public static void main(String[] args) {
        IntStack stack = new IntStack(12);
        System.out.println(stack);
        stack.push(12);
        stack.push(1);
        System.out.println(stack);
    }
}
